////////////////////////////////////////////////////////////////////////////////
/// @file     mcu.c
/// @author   ZZC
/// @brief    
////////////////////////////////////////////////////////////////////////////////
#include "config.h"


extern u32 SystemCoreClock;

////////////////////////////////////////////////////////////////////////////////
/// @brief  SysTick_CONFIG 100us
/// @param  None
/// @retval None
////////////////////////////////////////////////////////////////////////////////
void SysTick_CONFIG(void)
{		
	#define	DEF_TIMER_VAL		10000	//100US

	if (SysTick_Config(SystemCoreClock / DEF_TIMER_VAL)) 
	{
		while (1);
	}
	NVIC_SetPriority(SysTick_IRQn, 0x0);
}

////////////////////////////////////////////////////////////////////////////////
/// @brief  SysTick_Handler 100us
/// @param  None
/// @retval None
////////////////////////////////////////////////////////////////////////////////
void SysTick_Handler(void)
{
    CallBack_100us();
}


////////////////////////////////////////////////////////////////////////////////
/// @brief  TIM14_CONFIG  250us
/// @param  None
/// @retval None
////////////////////////////////////////////////////////////////////////////////
void TIM14_CONFIG(void)
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
	NVIC_InitTypeDef NVIC_StructInit;

	//Enable TIM14 clock, default clock source is PCLK2,Alternative Clock Sources
	//RCC_APB1PeriphClockCmd(RCC_APB1ENR_TIM14, ENABLE);

	//TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
	TIM_TimeBaseStructure.TIM_Period = 25;
	TIM_TimeBaseStructure.TIM_Prescaler = RCC_GetSysClockFreq() / 100000 - 1;
	//Sampling frequency of digital filter does not affect timer clock
	//Sampling Frequency Dividing Value
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;

	TIM_TimeBaseInit(TIM14, &TIM_TimeBaseStructure);

	// interrupt priority configuration

	NVIC_StructInit.NVIC_IRQChannel = TIM14_IRQn;
	NVIC_StructInit.NVIC_IRQChannelPriority = 1;
	NVIC_StructInit.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_StructInit);
	TIM_ClearFlag(TIM14, TIM_FLAG_Update);
	TIM_ITConfig(TIM14, TIM_IT_Update, ENABLE);

	TIM_Cmd(TIM14, ENABLE);
	
}

////////////////////////////////////////////////////////////////////////////////
/// @brief  TIM14_IRQHandler 250us
/// @param  None
/// @retval None
////////////////////////////////////////////////////////////////////////////////
void TIM14_IRQHandler(void)
{
	//TIM_ClearITPendingBit(TIM14, TIM_IT_Update);  
	CLEAR_BIT(TIM14->SR, TIM_IT_Update);
	CallBack_250us();                                                      
}



////////////////////////////////////////////////////////////////////////////////
/// @brief  Init_Timer
/// @param  None
/// @retval None
////////////////////////////////////////////////////////////////////////////////
void Init_Timer(void)
{
	SysTick_CONFIG();
	TIM14_CONFIG();
}
//===============================================================

////////////////////////////////////////////////////////////////////////////////
/// @brief  CPU_Init
/// @param  None
/// @retval None
////////////////////////////////////////////////////////////////////////////////
void User_CPU_Init(void)
{
	RCC->AHBENR |=(RCC_AHBENR_GPIOA|RCC_AHBENR_GPIOB);
	RCC->APB1ENR|=(RCC_APB1ENR_ADC1|RCC_APB1ENR_TIM14);
	
	USER_GPIO_Init();			//端口输出配置
	Init_Timer();

	#if TRAN_MODE==DEF_RS232_MODE
		UART1_Init();
	#endif					
}
